home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / pbmplus / ppm / libppm2.c < prev    next >
Text File  |  1996-02-28  |  4KB  |  184 lines

  1. /* libppm2.c - ppm utility library part 2
  2. **
  3. ** Copyright (C) 1989 by Jef Poskanzer.
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include "ppm.h"
  14. #include "libppm.h"
  15.  
  16. #if __STDC__
  17. void
  18. ppm_writeppminit( FILE* file, int cols, int rows, pixval maxval, int forceplain )
  19. #else /*__STDC__*/
  20. void
  21. ppm_writeppminit( file, cols, rows, maxval, forceplain )
  22.     FILE* file;
  23.     int cols, rows;
  24.     pixval maxval;
  25.     int forceplain;
  26. #endif /*__STDC__*/
  27.     {
  28. #ifdef PBMPLUS_RAWBITS
  29.     if ( maxval <= 255 && ! forceplain )
  30.     fprintf(
  31.         file, "%c%c\n%d %d\n%d\n", PPM_MAGIC1, RPPM_MAGIC2,
  32.         cols, rows, maxval );
  33.     else
  34.     fprintf(
  35.         file, "%c%c\n%d %d\n%d\n", PPM_MAGIC1, PPM_MAGIC2,
  36.         cols, rows, maxval );
  37. #else /*PBMPLUS_RAWBITS*/
  38.     fprintf(
  39.     file, "%c%c\n%d %d\n%d\n", PPM_MAGIC1, PPM_MAGIC2,
  40.     cols, rows, maxval );
  41. #endif /*PBMPLUS_RAWBITS*/
  42.     }
  43.  
  44. static void
  45. putus( n, file )
  46.     unsigned short n;
  47.     FILE* file;
  48.     {
  49.     if ( n >= 10 )
  50.     putus( n / 10, file );
  51.     (void) putc( n % 10 + '0', file );
  52.     }
  53.  
  54. #ifdef PBMPLUS_RAWBITS
  55. static void
  56. ppm_writeppmrowraw( file, pixelrow, cols, maxval )
  57.     FILE* file;
  58.     pixel* pixelrow;
  59.     int cols;
  60.     pixval maxval;
  61.     {
  62.     register int col;
  63.     register pixel* pP;
  64.     register pixval val;
  65.  
  66.     for ( col = 0, pP = pixelrow; col < cols; ++col, ++pP )
  67.     {
  68.     val = PPM_GETR( *pP );
  69. #ifdef DEBUG
  70.     if ( val > maxval )
  71.         pm_error( "r value out of bounds (%u > %u)", val, maxval );
  72. #endif /*DEBUG*/
  73.     (void) putc( val, file );
  74.     val = PPM_GETG( *pP );
  75. #ifdef DEBUG
  76.     if ( val > maxval )
  77.         pm_error( "g value out of bounds (%u > %u)", val, maxval );
  78. #endif /*DEBUG*/
  79.     (void) putc( val, file );
  80.     val = PPM_GETB( *pP );
  81. #ifdef DEBUG
  82.     if ( val > maxval )
  83.         pm_error( "b value out of bounds (%u > %u)", val, maxval );
  84. #endif /*DEBUG*/
  85.     (void) putc( val, file );
  86.         }
  87.     }
  88. #endif /*PBMPLUS_RAWBITS*/
  89.  
  90. static void
  91. ppm_writeppmrowplain( file, pixelrow, cols, maxval )
  92.     FILE* file;
  93.     pixel* pixelrow;
  94.     int cols;
  95.     pixval maxval;
  96.     {
  97.     register int col, charcount;
  98.     register pixel* pP;
  99.     register pixval val;
  100.  
  101.     charcount = 0;
  102.     for ( col = 0, pP = pixelrow; col < cols; ++col, ++pP )
  103.     {
  104.     if ( charcount >= 65 )
  105.         {
  106.         (void) putc( '\n', file );
  107.         charcount = 0;
  108.         }
  109.     else if ( charcount > 0 )
  110.         {
  111.         (void) putc( ' ', file );
  112.         (void) putc( ' ', file );
  113.         charcount += 2;
  114.         }
  115.     val = PPM_GETR( *pP );
  116. #ifdef DEBUG
  117.     if ( val > maxval )
  118.         pm_error( "r value out of bounds (%u > %u)", val, maxval );
  119. #endif /*DEBUG*/
  120.     putus( val, file );
  121.     (void) putc( ' ', file );
  122.     val = PPM_GETG( *pP );
  123. #ifdef DEBUG
  124.     if ( val > maxval )
  125.         pm_error( "g value out of bounds (%u > %u)", val, maxval );
  126. #endif /*DEBUG*/
  127.     putus( val, file );
  128.     (void) putc( ' ', file );
  129.     val = PPM_GETB( *pP );
  130. #ifdef DEBUG
  131.     if ( val > maxval )
  132.         pm_error( "b value out of bounds (%u > %u)", val, maxval );
  133. #endif /*DEBUG*/
  134.     putus( val, file );
  135.     charcount += 11;
  136.     }
  137.     if ( charcount > 0 )
  138.     (void) putc( '\n', file );
  139.     }
  140.  
  141. #if __STDC__
  142. void
  143. ppm_writeppmrow( FILE* file, pixel* pixelrow, int cols, pixval maxval, int forceplain )
  144. #else /*__STDC__*/
  145. void
  146. ppm_writeppmrow( file, pixelrow, cols, maxval, forceplain )
  147.     FILE* file;
  148.     pixel* pixelrow;
  149.     int cols;
  150.     pixval maxval;
  151.     int forceplain;
  152. #endif /*__STDC__*/
  153.     {
  154. #ifdef PBMPLUS_RAWBITS
  155.     if ( maxval <= 255 && ! forceplain )
  156.     ppm_writeppmrowraw( file, pixelrow, cols, maxval );
  157.     else
  158.     ppm_writeppmrowplain( file, pixelrow, cols, maxval );
  159. #else /*PBMPLUS_RAWBITS*/
  160.     ppm_writeppmrowplain( file, pixelrow, cols, maxval );
  161. #endif /*PBMPLUS_RAWBITS*/
  162.     }
  163.  
  164. #if __STDC__
  165. void
  166. ppm_writeppm( FILE* file, pixel** pixels, int cols, int rows, pixval maxval, int forceplain )
  167. #else /*__STDC__*/
  168. void
  169. ppm_writeppm( file, pixels, cols, rows, maxval, forceplain )
  170.     FILE* file;
  171.     pixel** pixels;
  172.     int cols, rows;
  173.     pixval maxval;
  174.     int forceplain;
  175. #endif /*__STDC__*/
  176.     {
  177.     int row;
  178.  
  179.     ppm_writeppminit( file, cols, rows, maxval, forceplain );
  180.  
  181.     for ( row = 0; row < rows; ++row )
  182.     ppm_writeppmrow( file, pixels[row], cols, maxval, forceplain );
  183.     }
  184.